package Soligee.model.vo.lancamentos;
//orc
import Soligee.model.vo.cadastros.PessoaVO;
import Soligee.model.vo.cadastros.ProdutoVO;
import java.io.Serializable;
import javax.persistence.*;
import java.util.Collection;
import java.util.Date;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import Soligee.model.vo.cadastros.VendedorVO;

@Entity
@Table(name = "orcamento")
public class OrcamentoVO implements Serializable {

    @Id
    @SequenceGenerator(name = "cod_orcamento", sequenceName = "cod_orcamento_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "cod_orcamento")
    @Column(name = "cod_orcamento", nullable = false)
    private int codOrcamento;
 
    @Column(name = "data_orcamento", nullable = false)
    @Temporal(TemporalType.DATE)
    private Date dataOrcamento;
    @Column(name = "validade_proposta", nullable = false)
    @Temporal(TemporalType.DATE)
    private Date validadeProposta;
    @Column(name = "qtdade_produto", nullable = false)
    private int qtdadeProduto;
    @Column(name = "plano_pagto", nullable = false)
    private int planoPagto;
    @Column(name = "valor_total_vista", nullable = false)
    private double valorTotalVista;
    @Column(name = "valor_total_prazo", nullable = false)
    private double valorTotalPrazo;
    @Column(name = "observacoes", nullable = false)
    private String obs;
    @Column (name="ativo")
    private boolean ativo;
    
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "itensorcamento",
    joinColumns = @JoinColumn(name = "cod_orcamento"),
    inverseJoinColumns = @JoinColumn(name = "cod_produto"))
    @Cascade(CascadeType.SAVE_UPDATE)
    private Collection<ProdutoVO> produtos;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "cod_vendedor", insertable = true, updatable = true, nullable = false)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.SAVE_UPDATE)
    private VendedorVO vendedor;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "cod_pessoa", insertable = true, updatable = true, nullable = false)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.SAVE_UPDATE)
    private PessoaVO pessoa;



    public OrcamentoVO() {
    }

    public OrcamentoVO(VendedorVO vendedor,PessoaVO pessoa, int codOrcamento, Date dataOrcamento,
        Date validadeProposta, int qtdadeProduto, int planoPagto,
        double valorTotalVista, double valorTotalPrazo, String obs) {
        this.setCodOrcamento(codOrcamento);
        this.setVendedor(vendedor);
        this.setCodOrcamento(codOrcamento);    
        this.setDataOrcamento(dataOrcamento);
        this.setValidadeProposta(validadeProposta);
        this.setQtdadeProduto(qtdadeProduto);
        this.setPlanoPagto(planoPagto);
        this.setValorTotalVista(valorTotalVista);
        this.setValorTotalPrazo(valorTotalPrazo);
        this.setObs(obs);
        this.setAtivo(true);
        this.setPessoa(pessoa);
    }

    public Date getDataOrcamento() {
        return dataOrcamento;
    }

    public void setDataOrcamento(Date dataOrcamento) {
        this.dataOrcamento = dataOrcamento;
    }

    public int getCodOrcamento() {
        return codOrcamento;
    }

    public void setCodOrcamento(int codOrcamento) {
        this.codOrcamento = codOrcamento;
    }

    public String getObs() {
        return obs;
    }

    public void setObs(String obs) {
        this.obs = obs;
    }

    public int getPlanoPagto() {
        return planoPagto;
    }

    public void setPlanoPagto(int planoPagto) {
        this.planoPagto = planoPagto;
    }

    public int getQtdadeProduto() {
        return qtdadeProduto;
    }

    public void setQtdadeProduto(int qtdadeProduto) {
        this.qtdadeProduto = qtdadeProduto;
    }

    public Date getValidadeProposta() {
        return validadeProposta;
    }

    public void setValidadeProposta(Date validadeProposta) {
        this.validadeProposta = validadeProposta;
    }

    public double getValorTotalPrazo() {
        return valorTotalPrazo;
    }

    public void setValorTotalPrazo(double valorTotalPrazo) {
        this.valorTotalPrazo = valorTotalPrazo;
    }

    public double getValorTotalVista() {
        return valorTotalVista;
    }

    public void setValorTotalVista(double valorTotalVista) {
        this.valorTotalVista = valorTotalVista;
    }

    public Collection<ProdutoVO> getProdutos() {
        return produtos;
    }

    public void setProdutos(Collection<ProdutoVO> produtos) {
        this.setProdutos(produtos);
    }

    public VendedorVO getVendedor() {
        return vendedor;
    }

    public void setVendedor(VendedorVO vendedor) {
        this.vendedor = vendedor;
    }

    public boolean getAtivo() {
        return ativo;
    }
   
    public void setAtivo(boolean ativo) {
        this.ativo = ativo;
    }

    public PessoaVO getPessoa() {
        return pessoa;
    }

    public void setPessoa(PessoaVO pessoa) {
        this.pessoa = pessoa;
    }



}